Software Defined Networking (SDN) is an approach to computer networking that employs a split architecture network in which the forwarding (data) plane is decoupled from the control plane. The use of a split architecture network simplifies the network devices (e.g., switches) implementing the forwarding plane by shifting the intelligence of the network into one or more controllers that oversee the switches. SDN facilitates rapid and open innovation at the network layer by providing a programmable network infrastructure.
OpenFlow is a protocol that enables controllers and switches in an SDN network to communicate with each other. OpenFlow enables dynamic programming of flow control policies in the network. An OpenFlow switch uses a Packet-In message to transfer control of a packet to the controller. Packet-In events can be configured to buffer packets at the OpenFlow switch. If the Packet-In event is configured to buffer a packet at the OpenFlow switch and the OpenFlow switch has sufficient memory to buffer the packet, then the Packet-In message contains only some fraction of the packet header and a buffer identifier (ID) to be used by the controller when it is ready for the OpenFlow switch to forward the packet. OpenFlow switches that do not support internal buffering, or that are configured not to buffer packets for Packet-In events, or that have run out of internal buffering space, must send the full packet to the controller. Buffered packets will usually be processed via a Packet-Out message from the controller or automatically expire after some time.